package InterfazJpl;

import Initializer.InitializeBoard;
import Initializer.InitializeBoard.*;
import Search.BidirectionalAStarSearch;
import aimax.osm.data.Position;
import java.util.*;
import parserosm.ParserOsm;
/**
 *
 * @author Corlo
 */
public class Agente {

    public static int PosAgenteX=1;
    public static int PosAgenteY=1;

    public static int CasillaSiguienteX=2;
    public static int CasillaSiguienteY=1;
    public static ArrayList perception= new ArrayList();
    private static boolean grito = false;
    private static boolean pared = false;
    private static boolean brillo = false;

    private BidirectionalAStarSearch aestrella=new BidirectionalAStarSearch(null, null);
    //ParserOsm parseador = new ParserOsm(file);

    public void getPerception(){
        //ArrayList perception= new ArrayList();
        perception.add(false);//olor
        perception.add(false);//brisa
        perception.add(false);//brillo
        perception.add(false);//muerte
        perception.add(grito);//grito
        perception.add(pared);//pared
        
        if(!this.grito && !this.pared){
            if(!this.brillo){
                if(InitializeBoard.tableroWumpus.problems[0].gold.col==PosAgenteY && InitializeBoard.tableroWumpus.problems[0].gold.row==PosAgenteX){
                    perception.set(2, true);
                    this.brillo=true;
                }
            }
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].wumpus.row==(PosAgenteX+1)){
                perception.set(0, true);
            }
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.col==(PosAgenteY-1) && InitializeBoard.tableroWumpus.problems[0].wumpus.row==PosAgenteX){
                perception.set(0, true);
            }
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].wumpus.row==(PosAgenteX-1)){
                perception.set(0, true);
            }
        }

        //agujeros
        if(!this.pared){
            for(int i=0; i<3; i++){
                if(InitializeBoard.tableroWumpus.problems[0].pits[i].col==(PosAgenteY+1) && InitializeBoard.tableroWumpus.problems[0].pits[i].row==PosAgenteX){
                    perception.set(1, true);
                }
                if(InitializeBoard.tableroWumpus.problems[0].pits[i].col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].pits[i].row==(PosAgenteX+1)){
                    perception.set(1, true);
                }
                if(InitializeBoard.tableroWumpus.problems[0].pits[i].col==(PosAgenteY-1) && InitializeBoard.tableroWumpus.problems[0].pits[i].row==PosAgenteX){
                    perception.set(1, true);
                }
                if(InitializeBoard.tableroWumpus.problems[0].pits[i].col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].pits[i].row==(PosAgenteX-1)){
                    perception.set(1, true);
                }
                if(InitializeBoard.tableroWumpus.problems[0].pits[i].col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].pits[i].row==PosAgenteX){
                    perception.set(3, true);
                }
            }
            if(!this.grito){
                if(InitializeBoard.tableroWumpus.problems[0].wumpus.col==(PosAgenteY) && InitializeBoard.tableroWumpus.problems[0].wumpus.row==PosAgenteX){
                    perception.set(3, true);
                }
            }
        }
    }

    public void percepcionDisparo(int Orientation){
        if(Orientation==90){
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.row == PosAgenteX){
                if(InitializeBoard.tableroWumpus.problems[0].wumpus.col>PosAgenteY){
                    grito= true;
                }
            }
        }

        if(Orientation==270){
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.row == PosAgenteX){
                if(InitializeBoard.tableroWumpus.problems[0].wumpus.col<PosAgenteY){
                    grito= true;
                }
            }
        }

        if(Orientation==0){
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.col == PosAgenteY){
                if(InitializeBoard.tableroWumpus.problems[0].wumpus.row>PosAgenteX){
                    grito= true;
                }
            }
        }

        if(Orientation==180){
            if(InitializeBoard.tableroWumpus.problems[0].wumpus.col == PosAgenteY){
                if(InitializeBoard.tableroWumpus.problems[0].wumpus.row<PosAgenteX){
                    grito= true;
                }
            }
        }

    }

    public List procesarAccion(ArrayList orientacion_accion, InitializeBoard a, ParserOsm parseador){

        List<Position> nodosRecorridos = new ArrayList();


        if(orientacion_accion.get(1).toString().contentEquals("girarIzquierda")){
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 90){
                CasillaSiguienteX--;
                CasillaSiguienteY++;
            }
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 180){
                CasillaSiguienteX--;
                CasillaSiguienteY--;
            }
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 270){
                CasillaSiguienteX++;
                CasillaSiguienteY--;
            }
             if(Integer.parseInt(orientacion_accion.get(0).toString()) == 0){
                CasillaSiguienteX++;
                CasillaSiguienteY++;
            }
            nodosRecorridos = null;
        }

        if(orientacion_accion.get(1).toString().contentEquals("girarDerecha")){
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 270){
                CasillaSiguienteX--;
                CasillaSiguienteY--;
            }
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 0){
                CasillaSiguienteX++;
                CasillaSiguienteY--;
            }
            if(Integer.parseInt(orientacion_accion.get(0).toString()) == 90){
                CasillaSiguienteX++;
                CasillaSiguienteY++;
            }
             if(Integer.parseInt(orientacion_accion.get(0).toString()) == 180){
                CasillaSiguienteX--;
                CasillaSiguienteY++;        
            }
            nodosRecorridos = null;
        }

        if(orientacion_accion.get(1).toString().contentEquals("avanzar")){

            long desde=0;
            long hasta=0;

            if((this.CasillaSiguienteX>0 && this.CasillaSiguienteX<5) && (this.CasillaSiguienteY>0 && this.CasillaSiguienteY<5)){
                for(int i= 0; i<16; i++){
                    if(this.PosAgenteX==a.mapaWumpus.mapping[i].boardPosition.row && this.PosAgenteY==a.mapaWumpus.mapping[i].boardPosition.col){
                        desde=a.mapaWumpus.mapping[i].getNodeId();
                    }
                    if(this.CasillaSiguienteX==a.mapaWumpus.mapping[i].boardPosition.row && this.CasillaSiguienteY==a.mapaWumpus.mapping[i].boardPosition.col){
                        hasta=a.mapaWumpus.mapping[i].getNodeId();
                    }
                }
                nodosRecorridos = aestrella.busquedanot(desde, hasta, parseador);
                this.PosAgenteX=this.CasillaSiguienteX;
                this.PosAgenteY=this.CasillaSiguienteY;
                if(Integer.parseInt(orientacion_accion.get(0).toString())== 0 ){
                    this.CasillaSiguienteX++;
                }
                if(Integer.parseInt(orientacion_accion.get(0).toString())== 90 ){
                    this.CasillaSiguienteY++;
                }
                if(Integer.parseInt(orientacion_accion.get(0).toString())== 180 ){
                    this.CasillaSiguienteX--;
                }
                if(Integer.parseInt(orientacion_accion.get(0).toString())== 270 ){
                    this.CasillaSiguienteY--;
                }
                
            }else{
                this.pared=true;
                nodosRecorridos = null;
            }
        }

        if(orientacion_accion.get(1).toString().contentEquals("disparar")){
            percepcionDisparo(Integer.parseInt(orientacion_accion.get(0).toString()));
            this.perception.set(0,false);
            nodosRecorridos = null;
        }

        if(orientacion_accion.get(1).toString().contentEquals("pared")){
            this.pared=false;
            nodosRecorridos = null;
        }

        return nodosRecorridos;
    }

    public void limpiarperception(){
        this.perception.clear();

    }
    
}
